//
//  MainTabBar.swift
//  sinaDemo
//
//  Created by mac on 15/12/12.
//  Copyright © 2015年 zhouxubin. All rights reserved.
//

import UIKit

// 定义协议需要定义在上面
@objc protocol MainTabBarDelegate: NSObjectProtocol {
    optional func mainTabBar(tabBar: MainTabBar)
}

class MainTabBar: UITabBar {
    
    // 代理属性
    weak var myDelegate: MainTabBarDelegate?
    
    // 当实现了这个方法后,默认支持手码创建,不会调用下面的这个方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 添加加号按钮
        addSubview(composeButton)
    }

    // 当从XIB和sb中加载控件的时候就会调用这个方法,但是实现了这个方法
    required init?(coder aDecoder: NSCoder) {
        // 致命的错误,从xib和sb中加载调用这个方法默认实现报错
//        fatalError("init(coder:) has not been implemented")
        super.init(coder: aDecoder)
    }
    
    // 懒加载中间的按钮
    lazy var composeButton: UIButton = {
        // 这个相当于alloc,init
        let button = UIButton()
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        // 添加按钮的点击事件
        button.addTarget(self, action: "clickComposeButton", forControlEvents: UIControlEvents.TouchUpInside)
        return button
    }()
    
    // 按钮的点击事件
    func clickComposeButton() {
        // 通知代理弹出控制器, 因为代理可以不实现这个方法
        myDelegate?.mainTabBar?(self)
    }
    
    // 重新排布tabbar里的按钮
    override func layoutSubviews() {
        super.layoutSubviews()

        let buttonW = screenBounds.width / tabBarButtonCount
        let buttonH = frame.height
        var index: CGFloat = 0
        for subview in subviews {
            // 判断是否是UITabBarButton类型的按钮
            if subview.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                subview.frame = CGRectMake(index * buttonW, 0, buttonW, buttonH)
                // 如果是index==1的时候就+2
                index += index == 1 ? 2 : 1
            }
        }
        
        composeButton.frame = CGRectMake(CGFloat(2) * buttonW, 0, buttonW, buttonH)
        // 可以把按钮往上移动一点
//        bringSubviewToFront(composeButton)
    }

}
